The behavior is correct indeed. But I agree it is surprising, and it has not properly been documented so far:
declare option output:json "lax";
This is a shortcut for "lax=true". Thus, the boolean value will always be appended in the string representation, no matter if it has been specified in the original serialization option.
I event tried setting cdata-section-elements to "pre, code" and the response had a double comma ("cdata-section-elements=pre,,code,method=xml")
Single commas will be duplicated, such that they can be distinguished from option separators. This was only documented for the BINDINGS option, but not it's also documented for serialization parameters [1] and the server protocol.
Thanks, Christian