How can I make the length decrease constant between each object when using array modifier and object offset?
2.79
Natively in 2.79 you can use Dupliframes under 2.79 for this step. Create first keyframe, last keyframe of location and scale and enable under Object Properties &gt; Duplication &gt; Frames

Or you can use script (by Chebhou). It generates separated objects, that shares the same object data, so you can easily edit original data (shape) to affect all those objects or simply change object data to completely different one. Like if script generates a cube you can switch to Torus object data or what ever under Data Properties. But I see script works in 2.79 ...
2.9+
For 2.9x you would have to use something like Animation Nodes like Ligazeton's example. Or probably in experimental build you can try Geometry Nodes.