Willingham, who hammered his fifth homer of the season in the second inning to put the Nationals ahead early on, cost his team four runs in the fifth when he misplayed a routine fly ball off the bat of Fred Lewis.
With runners on first and third and two outs, Cabrera got Lewis to hit a lazy fly ball to left, but Willingham overran it and the ball dropped in, extending the inning.
"I misplayed it," Willingham said. "I mean, it happens. I ran in and the wind was blowing, and I just missed it. It turned the whole game around."
The damage turned out to be four runs, two of which scored on the error and two more after Cabrera lost his composure and issued four consecutive walks, the first intentionally.
"You have to put errors behind you and you have to be able to shake it off," said manager Manny Acta. "I told him that he wasn't able to handle it. This is Major League Baseball and the difference from the Minors is the mental aspect. You have to be able to put those things behind you."
According to Acta, Cabrera will continue to be in the rotation. Acta said Cabrera showed some good signs out there, but he fell apart after the error. Cabrera was unavailable for comment after the game.
"This was tough for the team," Acta said. "He pitched a lot better than the numbers show, but he crumbled after that error. None of these guys want to make errors, so he has to shake it off."
Third baseman Ryan Zimmerman provided the majority of the fireworks on offense. Zimmerman singled in the first inning off Randy Johnson to extend his hitting streak to 29 games and added a homer in the sixth and another one in the ninth.
Zimmerman had no problem with Johnson, who earned his 298th career win. Johnson went five-plus innings, allowing four runs on eight hits while striking out nine in the outing.
"He's got a pretty good slider, but I just tried to get a pitch I could handle and put a good swing on it," Zimmerman said.
The Nationals knocked the ball around the field for 15 hits, including four homers. Cristian Guzman, Adam Dunn, Elijah Dukes and Zimmerman all had multi-hit games for the Nats.
The Nationals didn't give up after falling behind 11-4 going into the ninth inning. They scored three runs off reliever Osiris Matos before Brian Wilson struck out Willingham with two runners on base to end the game.
"I'm really proud of my kids," Acta said. "I mean, it's the last inning of the game and we're down so many runs and they're still getting quality at-bats. These guys just won't go away. We just have to put some things together on the pitching side."