Match ends, Aberdeen 3, Celtic 4.
Scott Sinclair completed his hat-trick amid a spell of four goals in the final seven minutes as Celtic beat Aberdeen to move three points clear of Rangers before Saturday's Old Firm derby.
Sinclair twice put Brendan Rodgers' side in front from close range.
But Stevie May and Sam Cosgrove scored penalties in each half to level.
Substitute Odsonne Edouard chipped in Celtic's third and set up Sinclair for a fourth, before Lewis Ferguson's late consolation.
Five of the seven goals came in the final 14 minutes as the reigning Scottish Premiership champions secured a fifth successive win at Pittodrie.
And his team have a game in hand over city rivals Rangers, who drew at home to Hibernian, while Aberdeen slip to fourth in the table.
- Rodgers praises Sinclair & Edouard impact
- Reaction & Boxing Day action as it happened
- Who did you rate man of the match?
Goals galore on Boxing Day
Sinclair had been the difference when the sides last met in the Premiership, before Ryan Christie netted the winner in this month's League Cup final - and both players played a big part in the opening goal.
Christie's chipped pass released Callum McGregor in behind Aberdeen's defence and though his cross bounced off Dominic Ball, Sinclair was perfectly placed to profit.
It was from a similar move that the hosts pulled level. Niall McGinn got beyond Celtic's defence to latch on to Shay Logan's lofted pass and was taken late by Emilio Izaguirre after delivering a cross. May blasted the resulting spot-kick right down the middle.
Edouard, who had missed the weekend win over Dundee, took over from McGregor and the striker's pass inside Andrew Considine found Forrest, whose cross was turned in by Sinclair.
But Aberdeen came back again with Graeme Shinnie going down after being closed down by Mikael Lustig, the defender penalised for a push, and Cosgrove confidently converted.
Edouard received Forrest's pass and held off two defenders to lift the ball over Joe Lewis.
And the Frenchman weaved his way past Ball and Logan to get to the bye-line and provide the cut-back for Sinclair's tap into an empty net.
Celtic looked home and dry but there was to be a further twist as Ferguson turned in Connor McLennan's corner and substitute James Wilson volleyed Aberdeen's final chance over.
Rodgers faces big calls in derby - analysis
BBC Scotland's Tyrone Smith at Pittodrie
The Christmas dinners have long since disappeared, but the victory at Pittodrie has given Rodgers plenty of food for thought going into the weekend trip to face rivals Rangers.
Edouard came off the bench and made a huge impact. Rodgers admits he is not fully fit, but after that cameo he has surely done enough to justify a start at Ibrox?
Also, a big question remains about who will play at left-back - two players, Emilio Izaguirre and Jonny Hayes, played the role in Aberdeen but Kieran Tierney is their main man and Rodgers, who says he is monitoring his progress by the day, will be keeping his fingers crossed the Scotland international is available to play some part in the derby.
As for Aberdeen, they gave it their all, and while disappointed at the outcome, Derek McInnes was happy with what his side offered up - and will be confident that their first defeat in five games will not knock them off the very positive path they have been on in recent times.
'Aberdeen effort outstanding' - reaction
Aberdeen manager Derek McInnes: "The physical effort from the players was outstanding. At 2-2, the game's finely poised. The fourth goal's the one that kills us.
"My team showed exactly where they've been of late, went toe-to-toe with a good team. To score three goals against a team like Celtic should be enough to get something from the game."
Celtic manager Brendan Rodgers: "I don't think the scoreline quite reflects our performance and maybe the gap in the game. We wanted the three points and we got that. We certainly had to work for it.
"The last 15, 20 minutes the game started opening up for us. Our quality then came through."
- 17MayBooked at 52minsSubstituted forWilsonat 76'minutes
- 10McGinnBooked at 38minsSubstituted forWrightat 45'minutes
- 16CosgroveBooked at 90mins
- 3IzaguirreSubstituted forHayesat 45'minutes
- 49ForrestSubstituted forAjerat 89'minutes
- 42McGregorSubstituted forEdouardat 70'minutes
- 11SinclairBooked at 90mins
- William Collum
- Shots on Target
Second Half ends, Aberdeen 3, Celtic 4.
Attempt missed. James Wilson (Aberdeen) left footed shot from the centre of the box is too high.
Scott Sinclair (Celtic) is shown the yellow card.
Corner, Celtic. Conceded by Shaleum Logan.
Sam Cosgrove (Aberdeen) is shown the yellow card.
Goal! Aberdeen 3, Celtic 4. Lewis Ferguson (Aberdeen) left footed shot from very close range to the bottom left corner. Assisted by Connor McLennan with a cross following a corner.
Corner, Aberdeen. Conceded by Tomas Rogic.
Corner, Aberdeen. Conceded by Dedryck Boyata.
Substitution, Celtic. Kristoffer Ajer replaces James Forrest.
Goal! Aberdeen 2, Celtic 4. Scott Sinclair (Celtic) left footed shot from the centre of the box to the high centre of the goal. Assisted by Odsonne Edouard.
Goal! Aberdeen 2, Celtic 3. Odsonne Edouard (Celtic) left footed shot from the centre of the box to the top right corner.
Delay in match Scott Brown (Celtic) because of an injury.
Attempt blocked. Filip Benkovic (Celtic) right footed shot from outside the box is blocked.
Goal! Aberdeen 2, Celtic 2. Sam Cosgrove (Aberdeen) converts the penalty with a right footed shot to the top right corner.
Penalty Aberdeen. Graeme Shinnie draws a foul in the penalty area.
Penalty conceded by Mikael Lustig (Celtic) after a foul in the penalty area.
Foul by Jonny Hayes (Celtic).
Graeme Shinnie (Aberdeen) wins a free kick on the left wing.
Filip Benkovic (Celtic) wins a free kick on the right wing.