Pacemaker currently uses xmlRegisterNodeDefault() and xmlDeregisterNodeDefault() to ensure private data is added and freed to xmlNode objects. These functions are deprecated in libxml2, and prevent external apps from using libxml2 private data on their own if they link with Pacemaker libraries.
Most likely we'll need to require using Pacemaker wrappers for libxml2 APIs when manipulating Pacemaker XML (at least for functions that can create or destroy an xmlNode). The wrappers can all call pcmk__xml_init() before doing anything, so we wouldn't need to do that in any other initialization function.