Baird got a deft touch to John Arne Riise's near-post corner to beat goalkeeper Brad Guzan and deny Villa what looked increasingly like a battling point.
Fulham had been the better side, with Berbatov in commanding form on his comeback from a hip injury, but they had failed to convert a hatful of chances.
The home support were beginning to get edgy when the man they hail as "Bairdinho" popped up with the kind of finish Berbatov would have been proud of to snatch the points for Fulham.
Villa, who had not won on the road in 13 Barclays Premier League matches dating back to January, had a chance to rescue a point but Christian Benteke missed a sitter from close-range.
Benteke had been sent on for Darren Bent, who was restored to the Villa starting line-up after being dropped for the last two matches.
Bent failed to make much of impression - glancing one header wide and otherwise cutting a picture of frustration up front - unlike Berbatov.
The serene Bulgarian was immediately into the action, playing a key role as Fulham pressed Guzan into action twice inside the first five minutes.
Berbatov found a yard of space inside the Villa box and turned on Kieran Richardson's pass but Guzan reacted quickly to palm the shot away from an acute angle. The Bulgarian still has this wonderful ability to play the game at his own pace and he calmly held off the attentions of Nathan Baker to bring Sascha Riether into the box.
The German full-back squeezed a pass through to Richardson six yards out but Guzan blocked his shot and Riether's effort from the rebound went wide. Baker's response was to hack Berbatov down from behind, which seemed just about the only way Villa were going to win the ball off him.
Fulham appeared capable of scoring every time they were in possession.
Chris Baird and Steve Sidwell anchored the midfield and they always had runners, with John Arne Riise and Riether given the freedom to attack from full-back and stretch Villa.
At times Fulham played with five attackers as Richardson, Hugo Rodallega and the busy Mladen Petric supported Berbatov in causing Villa problems.
Brede Hangeland ran out of defence and slid a pass to Berbatov, who clipped a magnificent cross on the turn towards Baird but the header was wide.
Gabriel Agbonlahor created Villa's first opportunity himself, cutting in from the left before unleashing a deflected shot which brought a diving save from Mark Schwarzer.
Bent could not get enough on Matthew Lowton's cross from the right wing and his glancing header drifted harmlessly wide but that was as close as Villa came in the first half. Riise whipped one cross in for Berbatov, who did well to force a save from Guzan, and then another for Rodallega but the Colombian headed wide.
Agbonlahor was working hard for Villa and he tried to pick out Bent in the Fulham box but Sidwell, enjoying a strong game against his old club, was on hand to intercept.
Villa started the second-half brightly, with Agbonlahor heading over the bar from Lowton's cross but Fulham still looked the more likely team to score.
Karim El Ahmadi was booked for a foul on Berbatov that checked a Fulham counter-attack.
Berbatov failed to make decent contact as he attempted an acrobatic volley after Rodallega's cross had fallen to him at the far post.
Villa failed to clear their lines properly and it required a brave block from Lowton to deny Richardson, before Bent was replaced by Benteke.
Ashkan Dejagah came on for Fulham to make his debut and was quickly in the thick of the action, stinging Guzan's hands with a 25-yard drive after some sublime build-up play.
Then came the breakthrough. Baird stole in front of Eric Lichaj, Fabian Delph and Bennett to get a touch to Riise's corner and beat Guzan at the near post.
The reaction inside Craven Cottage as much one of relief as celebration - although that should have been cut short immediately.
Charles N'Zogbia squared the ball to Benteke six yards out but he inexplicably failed to hit the target and with that miss went Villa's hopes of a point.