mirod is, as usual, way ahead of me! normalize() does the trick.
Unfortunately, even in the 3.30 development version, normalize() must be explicitly called. I can see a need for that in some situations, but at least in my document processing work, I generally want normalized trees. So rather than calling normalize() whenever I am unsure whether the tree has become un-normalized, I think I'll wrap the few editing methods that lead to un-normalized trees (cut and erase/unwrap, primarily) with a