Yaya Toure's brilliant free-kick and a Vincent Kompany goal put City in command at the break.
But Kieran Richardson pulled one back and a comical Kompany own goal, slicing the ball over the head of his goalkeeper Joe Hart, made it 2-2.
Jesus Navas spared his captain's blushes with the third in the 78th minute before James Milner got the killer fourth.
Hart will now keep his place in the Manchester City side for the Boxing Day clash against Liverpool after making his first league appearance in almost two months.
Manager Manuel Pellegrini said he had seen enough to confirm the England goalkeeper will face Liverpool. He said: "We don't know what will happen in the future; today, what Joe did I think he did it well.
"At the moment he deserved to play today and he also deserves to continue. When I put Costel Pantilimon in the starting XI I spoke with Joe and he understood that he was not in a good moment.
"Maybe seven games after, one month after, he's working very hard, and I thought that he deserved another opportunity, and I think he did well.
"It was a really difficult match: the pitch wasn't good and it was very windy," Pellegrini added.
"Fulham are a tough team at home and they defend very well."
Manchester United claimed a fourth straight win in all competitions, 3-1 at home to struggling West Ham.
Danny Welbeck scored the first, his third in three games, before teenager Adnan Januzaj added to his burgeoning reputation with the second before half-time, bamboozling James Collins before shooting into the far corner.
Ashley Young made it three with a thumping right-foot finish from just inside the area, with Carlton Cole getting a consolation.
West Brom, in their first match since the departure of coach Steve Clarke, snatched a 1-1 draw at home to Hull. Jake Livermore's first-half goal looked set to condemn the hosts to another defeat until substitute Matej Vydra levelled four minutes from time.
Newcastle continued their impressive campaign by winning 3-0 at Crystal Palace, Yohan Cabaye, a Danny Gabbidon own goal and a late Hatem Ben Arfa penalty doing the damage.
Bottom side Sunderland were unable to take advantage of the defeats for their relegation rivals, though, as they were held to a 0-0 home draw by Norwich.
Elsewhere, Peter Crouch scored the 70th-minute winner as Stoke won 2-1 at home to Aston Villa. Charlie Adam had put Mark Hughes's side ahead, but Libor Kozak levelled.