Hola furoya:
Lo de desarmar el código... creo que ya tienes que estar acostumbrado... (si no, es difícil aprender...)
Creo que para quitar nodos vacíos debes controlar que el nodeType == (1 o 3)
y el nodeValue con algo distinto de tabuladors/espacios o saltos de línea...
http://html.conclase.net/w3c/dom1-es...-one-core.html
Sobre la validación, normalmente no aspiro a validar más que html 4.01 (y si bien termino pasándola, me hace perder muchas horas...)
Saludos