The Palace winger scored the only goal of the game with 16 minutes remaining to help Tony Pulis’ side to their third straight win and leapfrog their opponents in the table, moving onto 37 points with five games remaining.
Meanwhile, Villa suffered their fourth straight defeat with a toothless display and slipped to four points off the bottom three. They are now without an away win since New Year’s Day.
The game in south London started at a pace that suggested the game was being played at the end of the season with both sides already planning their summer holidays.
Villa laboured for the majority of the game and Palace did eventually move through the gears. But for wasteful finishing from Yannick Bolasie and Cameron Jerome, they would have been out of sight before Puncheon’s 76th-minute winner.
After a cagey opening spell, the first action of note came as Kagisho Dikgacoi was forced off through injury on 18 minutes, with Pulis opting to replace the South Africa international with Marouane Chamakh.
The visitors came close to opening the scoring moments later but Jerome was in the right place at the right time to turn a tame Ciaran Clark header off the line after the ball had evaded Julian Speroni’s grasp.
With the game ambling along neither side was able to get a firm foothold on proceedings, with a long-range effort from Villa’s Ashley Westwood charged down by Damien Delaney. It was the best chance either side could muster until seven minutes before the interval.
Joe Ledley was fouled by Westwood and Palace put together a wonderful training ground set-piece as Joel Ward, Mile Jedinak and Puncheon combined to tee up Bolasie.
The winger was through on goal but miscued his effort woefully under close pressure from Grant Holt, with Palace’s penalty appeals correctly turned down by referee Howard Webb.
Chamakh then came close as he went to head Adrian Mariappa’s deep cross just wide with the hosts finally starting to have an impact on the game.
The returning Gabriel Agbonlahor had been quiet in the first half but had his first sight of goal shortly after the break, curling an effort from outside the box which Speroni gathered with ease.
But it was the home side who wasted another golden opportunity to open the scoring, with Bolasie involved once more.
The Congo international saw a deflected shot pushed into the path of Jerome by Brad Guzan but the striker could only turn the rebound on to the crossbar from two yards out.
The Eagles soon re-established the authority on the game they held at the end of the first half and Bolasie was unfortunate to see a 25-yard drive fly just wide of Guzan’s right-hand post with the USA international beaten.
There was a moment of confusion just after the hour mark as Webb pointed for a penalty to the hosts for a handball against Nathan Baker after communicating with his assistant.
But, after further consultation the penalty decision was overturned, much to the fury of the home supporters inside of Selhurst Park.
But their jeers turned to howls of delight with 14 minutes remaining as Bolasie’s cross evaded Chamakh but dropped to Puncheon, who converted on the turn to put the Eagles ahead.
The goal took Puncheon clear as Palace’s leading Premier League scorer for the campaign and he was unlucky not to add another as he cut inside before seeing an effort clip off the post.
Lambert threw on Marc Albrighton and Andreas Weimann as he looked to give his side more impetus going forward and it was the latter who forced a smart save out of Speroni as he flicked Holt’s downward header towards goal.
That proved to be the last meaningful threat to Palace’s third consecutive league win.