The second semi-final was delayed by three-and-a-half hours because of steady rain before Federer and Nadal came out for their heavily anticipated showdown, the Swiss dominating before sealing victory in one hour and 31 minutes.
Serving for the match at 5-4 and 40-30, Federer was briefly held up by a light sprinkling of rain before he powered down a 125mph ace, his sixth in all, to book his place in the final.
"I just had a good day," 16-times Grand Slam champion Federer said in a courtside interview after winning 38 of his 40 matches since last year's US Open. "Another great match in tough conditions.
"We both expected rain in the match and it did rain a few times. I couldn't be more happy. I have played amazing against Rafa. He is a great champion.
'Tonight I felt good about my game, I guess I had a no-lose mentality," added the third-seeded Swiss, who had battled flu and a temperature earlier in the tournament.
"I've not felt great this week and I didn't expect myself to play so well tonight. This is sometimes when you can pull off the biggest wins of your career."
Watched by a near-capacity crowd under leaden skies, Federer broke twice winner Nadal in the second game of the match, ending a riveting exchange with an overhead forehand smash to lead 2-0.
However, the Spanish left-hander broke back in the fifth when the Swiss netted a forehand after the two players had treated the crowd to a sequence of absorbing rallies with superbly angled shots.
Federer regained control by breaking second-seeded Nadal in the ninth when the Spaniard's backhand floated long and he served out to love in the 10th, clinching the first set in 42 minutes with a forehand drop shot.
Oozing confidence and moving in typically elegant style, Federer again broke Nadal in the third game of the second after the Spaniard double-faulted to trail 0-40 before dumping a backhand into the net.
Nadal was also broken in the seventh, again double-faulting for 30-40 and then sending a backhand well wide after a protracted rally.
Serving for the match at 5-2, the Swiss surprisingly failed to hold as his opponent struck successive forehand winners after moving Federer from side to side with penetrating baseline shots.
Nadal held serve for 4-5 and Federer came from 15-30 down in the 10th to beat his rival for a 10th time in 28 meetings.
"The weather conditions, yeah, it wasn't easy to play but it was a good match," Nadal said after losing to the Swiss for only the second time in their last six meetings. "He played fantastic, and I just congratulate him."