Gracias de nuevo ocp001a por la respuesta.
Ya he resuelto el problema. Simplemente cambiando async: false, parece que funciona (aunque aún lo estoy testeando).
Una última pregunta: ¿sabes como quitar el dichoso aviso que sale en Firefox al ejecutar "beforeunload": de "confirmar que quiere abandonarla..."?
... va a ser algo con window.close(), pero no se como se llama a esa ventana...