"He delivered," Kidd said.
Brooklyn (11-21) trailed 89-79 with 6:54 remaining, but used a 14-0 run to go up 93-89 in the closing minutes -- surprising the Western Conference-leading Thunder (25-7).
Oklahoma City's Serge Ibaka tied the game at 93 with an inside basket with 5.8 seconds left. Johnson then took a pass from Garnett on the other end, stepped back and connected on a 19-footer from the top of the key.
Brooklyn had lost two in a row and six of seven coming into the game.
"I thought we as a team did a great job in keeping the game close and coming up with the big plays, especially in the fourth quarter and down the stretch," Johnson said. "Coach drew the play up in the huddle, and the rest is history."
Kevin Durant led the Thunder with 24 points on 8-of-13 shooting. The NBA's leading scorer had scored 33 or more in each of Oklahoma City's last three games -- all of which it played without All-Star point guard Russell Westbrook following his knee surgery on Dec. 27.
The loss was the second straight for the Thunder, which fell to Portland on Dec. 31. It's only the second time Oklahoma City has lost two straight games this season.
"We've just got to be better," Durant said. "It's tough to swallow, losing at the buzzer like that after being up so much."
Brooklyn, which trailed by as many as 16 points twice in the game, appeared finished at various points during the first half and even near the end of the third quarter when the Thunder went up 77-61 after a 3-pointer by Jeremy Lamb.
The Nets, however, had other plans -- going on their 14-0 run in the closing minutes to take a 93-89 lead. Paul Pierce scored five points during the spurt, and Williams gave Brooklyn its first lead since the first half with a 3-pointer to go up 91-89.
Pierce finished with 18 points, but it was Williams who spearheaded the fourth-quarter comeback. He scored 18 in the second half.
"We didn't give in to the team making the run, even though in the third quarter they really pushed the lead," Pierce said. "The crowd really got behind them, but the thing is we really stayed together.
"Hopefully we can build on it."
The loss was the third in four games at home for the Thunder, who opened the season 13-0 at home.
"We have to do a better job definitely of protecting leads," coach Scott Brooks said. "That's something that we have to do a better job of, especially on our home floor."
Brooklyn, despite its struggles this season, was up 29-26 after the first quarter -- led by eight points from Williams. The Nets stayed close into the second quarter, trailing 38-37 after a 3-pointer by Mirza Teletovic.
Oklahoma City, now 14-3 at home this season, took control after that with a 14-1 run to go up 52-38. Ibaka had two fast-break baskets during the spurt and Durant added a pull-up 3 on the break.
Thabo Sefolosha capped the run with a jumper for the Thunder, who shot 52.5 percent (21 of 40) in the first half. The guard also gave Oklahoma City its biggest lead of the half with a free throw to go up 59-43 late in the second quarter.
The Nets were just 13-of-34 shooting (38.2 percent) in the first half, but connected on 18 of 36 shots (50 percent) in the second half. Williams was 10 of 17 from the floor, while Johnson finished 4 of 11.
None were bigger than his last shot.
"That's a good way to start the new year," Williams said.
Westbrook, out until after the All-Star break, was courtside during the game and was walking without crutches. ... Brooklyn scored five points in 0.9 seconds to end the third quarter, with Pierce hitting a jumper and Williams connecting on a 3 at the buzzer following a steal.