The original question
Ask each person if they are the barkeep. The aim of this question is not to identify the barkeep but to find the white hat or the black hat.
If only one person answers 'no' then that person is the white hat (the black hat will always claim to be the barkeep, the barkeep in this case has answered truthfully).
If two people answer 'no' then the one person who answered yes must be the black hat. (the barkeep in this case has answered has lied).
Now that one of the cowboys has been identified that cowboy can be interrogated to reveal who started the fight, (remembering to assume to opposite if it was the black hat who was initially identified), and if you desire the identities of the other two.
If there happened to be more than two cowboys and/or more than one barkeep the procedure is roughly the same and should work as long as there is at least one white hat.
If only one answers 'no' initially they are the only white hat and the problem is solved. (Just ask him who started the fight.)
If more than one answers 'no' then you may have more than one white hat or a white hat(s) and a confused barkeep. Ask one of them if they are the barkeep again.
If they now answer 'yes' that is the barkeep (and you must have questioned a black hat in the last round of question.)
If not ask each of those white hat/bar keep candidates if the barkeep has lied so far. If any answer 'yes' then you have just found a white hat amongst this subgroup, again the problem is solved. If no one answers 'yes' to this question the subgroup contains only white hats and your problems are over.
If it is possible that there are no white hats present then you have a more difficult problem. It is still possible to work out who is/are the barkeep(s) (or if you have a room full black hats) but it will take repeated rounds of questioning, changing the order and questions.