Substitute Darren Byfield's injury-time goal saw Bristol City condemn leaders Watford to a third defeat in a week.
Ivan Sproule was twice foiled by Mart Poom and Enoch Showunmi headed against the post as City threatened early on.
Marlon King's cross was tipped on to the post by Adriano Basso, who saved Jobi McAnuff's shot as Watford rallied.
Liam Fontaine's cross was headed in by Showunmi but John-Joe O'Toole's nodded header seemed to have won a point until Byfield volleyed in Cole Skuse's cross.
Watford manager Aidy Boothroyd:
"I thought I would be glad to see the end of November but December has started just as badly. We've obviously got a lot of work to do.
"Fundamentally football is about scoring goals and keeping clean sheets and we have got to get back to that.
"We created enough chances to win comfortably. We didn't take them but I'm not going to lambast my strikers because they are fantastic players."
Bristol City boss Gary Johnson:
"We certainly were going for it at the end and I said to Darren just as he went on 'you'll get one chance, be ready for it'.
"We played some good stuff in the first half and had three or four good chances. It was a great game, two different styles. We had to compete with them and play our game.
"It's a massive boost to beat Watford on their own territory and it's what the lads deserved."
Watford: Poom, Stewart, Shittu, DeMerit, Doyley, Mahon (O'Toole 85), McAnuff, Williamson, King, Darius Henderson (Ellington 74), Smith.
Subs Not Used: Jackson, Mariappa, Ainsworth.
Booked: McAnuff, Darius Henderson.
Goals: O'Toole 87.
Bristol City: Basso, Orr, Fontaine, McCombe, Carey, Noble (Trundle 72), McIndoe, Elliott, Sproule (Skuse 77), Johnson, Showunmi (Byfield 90).
Subs Not Used: Weale, Vasko.
Goals: Showunmi 75, Byfield 90.
Ref: Phil Joslin (Nottinghamshire).