El broadcast manda tu evento a todos los usuarios menos al que manda el evento en este caso tu..
Y json porque estas mandando un objecto lo cual socket.io no tiene que probar que clase estas mandando , un objecto o un string, dándote mayor performance.. el metodo "in" el cuarto al que este usuario pertenece..
en tu código
Código:
var nick=allClients[socket.id];
delete allClients[socket.id];
si no pruebas que el usuario existe, te dara un error parando tu instancia de node..
Deberías comprobar que existe y después usas delete..