Dans l'expression « J'ai mal à la tête », « mal » est un nom commun, comme pour « j'ai soif » et « j'ai sommeil ».
« mal à la tête » forme un groupe nominal prépositionnel et sert de complément circonstanciel de lieu (il répond à la question « où ») pour préciser l'endroit où se situe la douleur ressentie par le sujet.
Pour « soif » et « sommeil », je dirais complément circonstanciel de manière. Quelqu'un peut-il confirmer ?
Grammaticalement, on pourrait aussi considérer que « avoir mal » forme une expression verbale idiomatique, comme indiqué dans #2 - Retro-Loc.
Dans notre comparaison, « douleur » s'utilise avec un déterminant « J'ai une douleur à la tête ».