Single element arrays : They look identical to a single object, so the JSON will show an object instead of an item in an array. Javascript is the way to implement for now if you would like to convert same to array.
Ideally, there should be an option in the policy which decides single element arrays should be treated as arrays or object. Again, someone will say i would like to selectively apply the option to specific elements in XML. Javascript is the rescue to handle these edge cases.
It is the default behavior of XMLtoJSON policy, that is it converts an element with single occurence into (object/string) and coverts it into an array only if the element has multiple occurence.
We have faced similar issue and resolved it using XLST. Since we were dealing with complex SOAP payload (response from provider) we had used XSLT transform policy to create our simple response structure and then used XMLtoJSON policy to covert the xml to json.
In the XSLT, the elements that are required to be an array irrespective of number of occurences in the SOAP response, we added an empty tag for that element. Addition of empty tag always creates two instances of the element and hence ensure that XMLtoJSON policy always converts it into an array.
Another solution can be creating the JSON response in XSLT itself. This allows you to create the JSON structure as per requirement.
Just FYI, there is an outstanding ticket, APIRT-1144, which extends the XMLToJSON policy to allow this automatically, without resorting to a JS callout.
For today, JS is the answer. It should be easier, in the future. (soon)