vejo duas maneiras de fazer isso.
wrap your call to ediff-merge-files around another emacs function that will wait for the call to finish, can play around with doing some hacks into the startup hooks, but this could get very messy
wrap your call to emacsclient with a script that waits for the new file to be created before returning, if the temporary file is created on demand then this is an easier solution, if the new file may already exist, then you'll need to use a placeholder file
Exemplo de script - ediff-wait, ele é cortado e tem verificações mínimas de integridade
#!/bin/sh
[ -f $3 ] && exit 1 # merge file exists?
emacsclient --eval "( ediff-merge-files \"$1\" \"$2\" nil \"$3\" )"
while /bin/true; do
[ -f $3 ] && exit 0
sleep 1
done