Control an object's specularity with distance
With material nodes, you can use the Camera Data input to get the distance from the camera to the surface. Note that this number will be much higher than the 0-1 range you'd normally want for a color value, and the numbers get bigger the further the surface is from the camera, so you'll need to do some math to invert and scale this value to whatever works best for your scene.
See the image below for a sample setup in Blender Internal, but Cycles has the Camera Data node as well.