No it's not optional. It's optional to explicitly specify an ordering, but otherwise the order is determined by the basic rules you linked to (base types first, alphabetic, ...).
The introductory paragraph is simply implying that you don't always need to know or care about the order - for example if you are using a generated proxy.
If you're using DataContractSerializer to deserialize a file, the best solution I can think of would be to use XSLT to transform it into the correct order before deserializing.
If you're calling a web service (what DataContractSerializer was designed for), you're better off sticking to the order in the contract.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…