You can use a Geometry Proximity node if you want, and your setup was close. Here's a version of your node group that works:
In this example, notice that I use an Object Info node, rather than an input to the Geometry node group. That gives me the geometry location of the empty. The only other change from your setup was to plug the distance output of the Geometry Proximity group into the Scale input of the Instance on Points node. This uses the relative position of the empty to control the scale of the icospheres:
EDIT: There seems to be a lot of confusion in the comments about the difference between this approach from the accepted answer and the approach I've described above. Here's a version of the other approach, simplified to highlight the major difference:
The geometry proximity node has been replaced by a proximity calculation using vector math. Both approaches work with an empty, because both approaches calculate the distance from the target object to a point. In both cases the point is the location of the empty. In both cases, the empty can be replaced by other objects, so long as their location is used.
The difference as Nathan has pointed out by example in the accepted answer is that my approach gives a single value for distance — the distance between the location of the empty and the nearest face (in the example) of the target object. (It could be the nearest vertex or edge, depending on settings in the Geometry Proximity node.) The other approach gives the distance between the location of the empty and every point on the target object.
Use my approach if you want a single value, ie for uniform scaling of instanced objects. Use the accepted approach if you want a field of values, ie for scaling that depends on the distance to each instance.