1. In a computing system comprising an extensible serialization engine that is capable of serializing and deserializing data objects of various types, a method of transforming an initial object of an initial type to a final object of a final type, wherein the method allows for runtime operation of the serialization engine to be altered by one or more extension routines, without having to replace a monolithic implementation of the serialization engine, the method comprising: receiving an initial object of an initial type for runtime processing by the serialization engine; receiving type information for the initial type of the initial object; generating an intermediate representation of the initial object that is suitable for runtime modification, the intermediate representation being based upon the type information of the initial object, based upon data within the initial object, and based upon patterns of types associated with the initial object, the intermediate representation further being a mutable object based upon a mutable type; calling one or more custom extension routines to change the intermediate representation of the initial object to a modified intermediate representation of the initial object, thereby altering the runtime operation of the serialization engine; and from the modified intermediate representation of the initial object, generating a final object of a final type, wherein the one or more custom extension routines called to change the intermediate representation specify how to change the intermediate representation, without actually changing the intermediate representation, such that changing the intermediate representation is deferred until generating the final object, in order to reduce buffering requirements.