"The .delay() method is best for delaying between queued jQuery effects. Because it is limited — it doesn' offer a way to cancel the delay"
Sicher - delay() wird in die Effekt-Queue eingefügt und diese lässt sich problemlos überspringen - z.B. mit einem .stop(true, true) wenn man über einen anderen Menüpunkt "überfährt". Die Doku ist hier etwas unglücklich geschrieben.
Schnelle Mousbewegungen würden damit zu einer Überlagerung führen.
Siehe oben.
Auf entsprechenden Event (mouseout/mouseleave) startest Du einen "echten" Timeout. Jeder neue Event muss diesen Timeout zunächst stoppen, dann erneut starten. Wenn der Timeout abgelaufen ist führst Du den eigentlich gewünschten Prozess zum Verstecken durch.
genau das macht delay() und stop(), nur dass dann alles sauber ein der Queue hängt.