You have probably already seen the GoogleCode book on nltk. I've been working through it very slowly on my own and while I have yet to tackle POS-tagging, it's one of the things I ultimately want to do when I feel adept enough to use the tool. At any rate, in Chapter 5, section 2 you get the following text and examples on making your own set of tagged tokens (apologies to all, but I copied directly from the text):
>>> tagged_token = nltk.tag.str2tuple('fly/NN')
>>> tagged_token
('fly', 'NN')
>>> tagged_token[0]
'fly'
>>> tagged_token[1]
'NN'
Continued from 5.2:
We can construct a list of tagged tokens directly from a string. The
first step is to tokenize the string to access the individual word/tag
strings, and then to convert each of these into a tuple (using
str2tuple()).
>>> sent = '''
... The/AT grand/JJ jury/NN commented/VBD on/IN a/AT number/NN of/IN
... other/AP topics/NNS ,/, AMONG/IN them/PPO the/AT Atlanta/NP and/CC
... Fulton/NP-tl County/NN-tl purchasing/VBG departments/NNS which/WDT it/PPS
... said/VBD ``/`` ARE/BER well/QL operated/VBN and/CC follow/VB generally/RB
... accepted/VBN practices/NNS which/WDT inure/VB to/IN the/AT best/JJT
... interest/NN of/IN both/ABX governments/NNS ''/'' ./.
... '''
>>> [nltk.tag.str2tuple(t) for t in sent.split()]
[('The', 'AT'), ('grand', 'JJ'), ('jury', 'NN'), ('commented', 'VBD'), ('on', 'IN'), ('a', 'AT'), ('number', 'NN'), ... ('.', '.')]
That "sent" variable up above is actually what raw tagged text looks like, as confirmed by going to the nltk_data directory on my own computer and looking at anything in corpora/brown/, so you could write your own tagged text using this formatting and then build your own set of tagged tokens with it.
Once you have set-up up your own tagged tokens you should then be able to set up your own unigram tagger based on your tagged tokens (from 5.5):
>>>unigram_tagger = nltk.UnigramTagger(YOUR_OWN_TAGGED_TOKENS)
Finally, because your tagged text is likely to be a really small sample (and thus inaccurate), you can list a fallback tagger, so that when it fails, the fallback comes to the rescue:
>>> t0 = nltk.UnigramTagger(a_bigger_set_of_tagged_tokens)
>>> t1 = nltk.UnigramTagger(your_own_tagged_tokens, backoff=t0)
Lastly, you should look into the n-gram differences, bigram, unigram, etc., also covered in the aforementioned Chapter 5.
At any rate, if you continue reading through Chapter 5, you'll see a few different ways of tagging text (including my favorite: the regex tagger!). There's a lot of ways to do this and much too complex to cover adequately in a small post like this.
Caveat emptor: I haven't tried all of this code, so I offer it as a solution I am currently, myself, trying to work out. If I have made errors, please help me correct them.