recorrer un objeto (árbol) recursivamente

¿Hay alguna manera (en jQuery o JavaScript) de recorrer cada objeto y son hijos y nietos, etc.

Si es así ... ¿también puedo leer su nombre?

Ejemplo:

foo :{
  bar:'',
  child:{
    grand:{
      greatgrand: {
        //and so on
      }
    }
  }
}

entonces el ciclo debería hacer algo como esto ...

loop start
   if(nameof == 'child'){
     //do something
   }
   if(nameof == 'bar'){
     //do something
   }
   if(nameof =='grand'){
     //do something
   }
loop end

Respuestas a la pregunta(2)

Su respuesta a la pregunta