En tu javascript no usás el operador de comparación == para comprobar, estás usando el operador de asignación =
No es lo mismo decir datos.nombre.value == "", que es preguntar si son iguales y esperar un verdadero o falso, que decir datos.nombre.value = "", que es forzar a que datos.nombre.value valga ""
En resumen, el código que mostrás es diferente del que usás realmente.
No es un tema de doctype, que sí puede afectar a javascript, pero no en un caso como este.