If you use the curve modifier to deform an object, yeah, it's going to get deformed.

If you don't want that, one work around is to not use a curve modifier to directly deform the object, but to instead use an armature that follows the curve.
I'll start by removing my curve modifier and applying my array. I've already seen that this array fits my curve about right like it's supposed to (not quite guaranteed.) Then I'll create a new armature and a bone for each blob. Eyeballing is fine. Once I made a few, I selected a bunch and shift-d duplicated, so it was easy.

I've disabled inherit scale on all of my bones (by selecting all of them and alt LMB on the checkbox, in properties/bone/relations.) I've also parented them all to a single bone, pointed downwards just so I can see it, which is non-deforming. This is my control bone, and I'll move the balls simply by selecting this bone and scaling it.
Time to parent the mesh to the armature with automatic weights. Then I had my constraints:

I'm using a clamp-to constraint that will translate my bone's position along the X axis onto the length of the curve. Once I've made one of these, I can copy it to all of my deforming bones using "copy constraints to selected bones" which I just access from the spacebar search.

It won't be anything near right in default pose, because the clamp-to doesn't work quite the same way as a curve modifier. But just select your control bone and scale it down some. At a scale of .27, the array about fits the curve.

And to draw the blobs closer, scale your control bone even smaller than that. Or, to change the position from which the blobs seem to spawn, move the control bone in the X axis.

I'm sure there are other ways to do this. This only took me five minutes though.