La sección 12.6.4 estándar de ECMAScript 5.1 (sobre bucles for-in) dice:
Las propiedades del objeto que se enumera pueden eliminarse durante la enumeración. Si se elimina una propiedad que aún no se ha visitado durante la enumeración, no se visitará. Si se agregan nuevas propiedades al objeto que se enumera durante la enumeración, no se garantiza que las propiedades recién agregadas se visiten en la enumeración activa. El nombre de una propiedad no debe visitarse más de una vez en cualquier enumeración.
Entonces, creo que está claro que el código del OP es legal y funcionará como se esperaba. Las peculiaridades del navegador afectan el orden de iteración y las declaraciones de eliminación en general, pero no si el código de OP funcionará. En general, es mejor eliminar solo la propiedad actual en la iteración: eliminar otras propiedades en el objeto hará que de manera impredecible se incluyan (si ya se visitaron) o no se incluirán en la iteración, aunque eso puede o no ser una preocupación según el situación.
Ver también:
Sin embargo, ninguno de estos afecta realmente el código del OP.