Santiago Solari's men were looking to make the most of Atletico Madrid and Sevilla drawing earlier in the day but could now end the weekend 10 points adrift of Barcelona.
Madrid was behind early on as Willian Jose converted a third-minute penalty and the home side was unable to pull level before half-time.
Despite Vazquez's red card for two bookings, Madrid remained well on top after the interval and should have had a penalty when goalkeeper Geronimo Rulli seemed to trip Vinicius Jr, but La Real escaped on that occasion and struck again through Ruben Pardo late on to end a run of four consecutive league defeats.
Madrid found itself with an uphill as Willian Jose emphatically dispatched his spot-kick after Casemiro's clumsily foul on Mikel Merino.
The host side created several chances in response – Karim Benzema just missing the bottom-right corner from close range in the 11th minute, shortly before Rulli denied Vinicius from a tight angle.
Luka Modric then forced Rulli into a smart stop down to his right from distance but they came closest just prior to the break – Vazquez's chipped cross-cum-shot coming back off the post.
Madrid turned things up a notch after the break, only for Vazquez to collect a second yellow card for a cynical foul on Merino.
Soon afterwards, Vinicius was unlucky to not be given a penalty when he appeared to be fouled by the sprawling Rulli.
La Real took full advantage, hitting Madrid on the break six minutes from the end and Pardo - a second-half introduction - nodded in Willian Jose's cross to leave Madrid beaten.