OK, this is a few years old, but I found this recently so I suspect other will to. I think it's incomplete and thought I'd share.
The question was: "Why is the Curve Modifier deforming strangely?"
The short answer is: It obeys exactly what has been done to the curve.
Clarification: If you reached the current state of the curve using transforms like, Scale, rotate and Location, this will be done to the object you apply the curve to. Take a look at the Transform properties [CTRL-N] and look at the Scale and Rotate. If this is not (1;1;1) and (0;0;0) respectively, that modification will be applied to your object/array. To avoid this, apply every aspect of Transform using
Apply Object Transform [CTRL-A] + Rotation & Scale before adding the curve modifier.
Apply Object Transform [CTRL-A] + Rotation & Scale
NOTE! If you got of to a bad start, remove the modifier before applying transform [CTRL-A]. It get's confusing when trying to adjust with the modifier in place (mute or not!). If you did it all correctly and something is still mirrored or turned inside out, fix it with clean set of factor -1 transforms and Apply transform before doing anything else.
I recently tried to apply a circular curve to an array but found it following the inside of the curve instead of the expected outside. Fixed it with a set of Scale -1 on two of the axis and Apply Scale. I think it got the result from the order in which I mirrored the object before applying the array. Aka, if you mirror from negative side of the coordinate space to the positive, it will give different result compared to starting with all positive vectors and mirror to negative side. (Applies to X, Y Z respectively with different result). This is basically an observation of previous answers "Honor the predominant axis and direction" answers I have seen.