Brown opened the scoring midway through the first period, tipping a shot from defenseman Jason Demers past Leafs goaltender James Reimer.
The Sharks had a two-man advantage for 76 seconds when Jay McClement and Mason Raymond were penalized 33 seconds apart. And Joe Pavelski found Thornton with plenty of room at the side of the net, and San Jose's captain made it 2-0 at 14:31.
"Discipline's a huge part," Raymond said. "You're killing penalties, you're not playing offense and you're playing in your own zone, so we're kind of shooting ourselves in the foot there."
The Leafs, meanwhile, had three shots in the first 1:31, then went 17:17 without one.
With Dan Boyle in the penalty box for interference, Raymond scored off the rush 2:44 into the second.
There was nothing Niemi could do on Kessel's power-play goal 9:47 into the second. Center Tyler Bozak -- who missed the bulk of the period to that point -- got Kessel the puck with a wide-open net.
Kessel didn't miss, hammering home his 15th goal of the season and 200th of his NHL career to make it 2-2. The crowd of 19,360 gave Kessel a standing ovation.
The Sharks took the lead for good at 16:00, when they took advantage of Toronto's fourth line of McLaren, Jerred Smithson and Colton Orr, who were caught on the ice for 1:48.
Defenseman Morgan Rielly couldn't clear the puck and Stuart skated to the net and appeared to bank the puck in off Pavelski. But it was changed to Stuart's goal, his third of the season.
"They're tired and they're fourth line so, no disrespect, but you can maybe try things that you ordinarily wouldn't do," Stuart said. "I think we had a lot of good looks on that shift. We were able to get a good bounce and capitalize on it."
The Leafs had some chances in the third, but they never managed to put enough pressure on the Sharks.
Couture sealed it with an empty-netter.
The Leafs held a pregame moment of silence for Toronto police constable John Zivcic, who died in a car accident Saturday. ... Cody Franson missed his second straight game with a lower-body injury. Toronto coach Randy Carlyle had called him a gametime decision, but the defenseman did not take part in warmups. ... Maple Leafs C Nazem Kadri missed the game because of a death in the family. ... Bozak left the game with what Carlyle called an upper-body injury.
Copyright by STATS LLC and The Associated Press
TORONTO, ON - DECEMBER 3: Carl Gunnarsson #36 of the Toronto Maple Leafs stretches during warm up prior to NHL...