Uh, this looks messy, we may need a scripting pro in here or something. I wish I had more time to look into this right now. Here's what I found:
When you agree to brawl Uthgerd in The Bannered Mare, she says "Just fists. No weapons, no magic... no crying. Let's go!" And this script fragment is on that info;
GetOwningQuest().SetStage(10)Game.GetPlayer().RemoveItem(Gold001, 100)DialogueFavorGeneric.Brawl(akspeaker)
Now that points to a favor quest (Favor017), in which stage 10 has a script fragment that says:
;The FavorAccepted function handles the actor variable and timer for the favor system
;Note that you don't need SetObjectiveDisplayed here, the function does that on it's own
kmyquest.FavorAccepted()
Now, the fragment on the dialogue info also says 'Brawl()' which is a function in the quest DialogueFavorGeneric, which has the script FavorDialogueScript attached. In that script is the function for 'Brawl()' which is;
; call this to initiate brawl quest through story managerFunction Brawl(Actor pTarget, Actor pTargetFriend = None) trace("Brawl: " + pTarget + ", friend=" + pTargetFriend) BrawlKeyword.SendStoryEvent(None, pTarget, pTargetFriend)endFunction
That sends the BrawlKeyword into a story manager, which I've never dealth with so that's where I lost the trail.
I really hope half of this can be copy+pasted onto a custom character, because it seems like a hell of a lot of work just to be able to punch someone without everyone flipping out at you.

Hopefully this half-baked anolysis helps...