Change scale of objects in array without affecting distance
While the array modifier, with its limited scaling options isn't really suited for the task, you can quite easily achieve this using dupliframes.

Move and scale your object into the position you want the first duplicate to be in, and hit I to add a LocScale keyframe to it. Then move forwards on the timeline some amount of frames, for example 100. On this latter frame,  move and scale your object to the transformation you want your last duplicate of the object to be, and insert another LocScale keyframe. Playing the animation should now move the object between the locations of the first and last duplicates you want to have. 

Go into duplication panel of the object buttons, and enable the "frames" option, and set "off" frames to 
your animation length / (the number of copies you want to have - 1) - 1,
and animation end frame one frame longer than your animation.
This will take the object's position on frame 1 and add a copy there, skip the off amount of frames, and add another copy on the frame after that, and so on, ending on the final position of the object.



Because animation interpolation by default is non-linear, you should go to a graph editor, and set the curve interpolation to linear (T -> Linear)


Example result, with cube animated to go from 0 to 20 on X, with a copy every 5 units


The instance of the cube you animated will not be rendered, only the copies will be visible in the render.