Σε μια κατσαρόλα, ζεσταίνουμε το βούτυρο σε δυνατή φωτιά μέχρι να λιώσει.
Έπειτα, προσθέτουμε το αλεύρι και ανακατεύουμε με το σύρμα, μέχρι να ομογενοποιηθεί το μείγμα μας.
Σταδιακά, προσθέτουμε το γάλα ανακατεύοντας συνεχώς, για να μη σβολιάσει το μείγμα και συνεχίζουμε το ανακάτεμα, μέχρι να δημιουργηθεί μια κρέμα.
Μόλις η κρέμα σχηματιστεί, βγάζουμε την κατσαρόλα από τη φωτιά και προσθέτουμε τη γραβιέρα και το μοσχοκάρυδο, και ανακατεύουμε μέχρι να ομογενοποιηθούν.
Προσθέτουμε αλάτι και πιπέρι, αν είναι απαραίτητο και αφήνουμε στην άκρη.
Στη συνέχεια, αλείφουμε τις 10 από τις φέτες του τόστ με μουστάρδα και απλώνουμε από πάνω τις φέτες ζαμπόν.
Στις άλλες 10 φέτες του τοστ απλώνουμε την μισή μπεσαμέλ και προσθέτουμε την υπόλοιπη γραβιέρα.
Ενώνουμε τις φέτες σε σάντουιτς.
Σε ένα τηγάνι, σε δυνατή φωτιά, λιώνουμε το υπόλοιπο βούτυρο και τοποθετούμε τα σάντουιτς τα οποία αφήνουμε να ψηθούν για 3-4΄ λεπτά από την κάθε πλευρά.
Προθερμαίνουμε το φούρνο στους 200°C.
Σε ένα ταψί, τοποθετούμε τα σάντουιτς, τα περιχύνουμε με την υπόλοιπη μπεσαμέλ και ψήνουμε για 3΄.
Για το Croque Madame, τηγανίζουμε τα αυγά σε δυνατή φωτιά με λίγο βούτυρο για 3΄, προσθέτουμε λίγο νερό και σκεπάζουμε το τηγάνι.
Σερβίρουμε τα σάντουιτς σκέτα για το Croque Monsieur ή με αυγό από πάνω για το Croque Madame.