The creature definitely should have:
[CREATURE:ID]
[NAME:] - the creature's name
[TILE:] - the tile which represents the creature
[COLOR:] -
the color of the creature tile
[POPULATION_NUMBER:] - I guess it's important, it shows how many creatures can appear on a map per year
[PREFSTRING:] - is essential for the reference in dwarves' thoughts
[BODY:] is essential if you need it to have any type of body, it's skipped for vermin and they're considered as a "while part body" (I don't think it's destructable in ways other than with vermin_hunter or via bridge-smashing)
[MAXAGE:] if you want your creature not to be immortal, if you skip it it won't die of an old age
[ATTACK:] if you want your creature to have any type of attack
[SIZE:] - you definitely need it if it's not a vermin, I think if you skip it it's set to default 7 but you'd better define it
[BIOME:] if you want your creature to appear somewhere, FANCIFUL creatures in vanilla are used for reference only and lack this tag
[SWIMS_INNATE]/[SWIMS_LEARNED] if you want your creature to be able to swim in any way
Other tokens are definitely totally optionable.
http://www.dwarffortresswiki.net/index.php/Creature_tokensP.S. Sorry for typos/bad grammar if there were any, it's 3:30 AM here and I'm drunk.
P.S. The df uses the following raw system: different types of things are in different files, and which thing is in the file is determined by [OBJECT:TYPE] in the beginning, where the TYPE shows what does this file contains.
As long as BODY type if different from CREATURE, it's described in separate files.
The BODY type should have
[BODY:ID] - id of the bodypart which is referenced in [BODY:ID1:ID2:ID3:<...>:IDX] in the creature file.
[BP:BPID:bpname]<[tokens]> - where BPID = just an id for the bodypart part (which can be referenced in attack*) and <[tokens]> is the list of tokens which describe the bodypart
http://www.dwarffortresswiki.net/index.php/Body_tokens* The attack uses some bodypart of creature and it can be described in 2 ways:
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:2:BLUDGEON]
or
[ATTACK:MAIN:BYTOKEN:RLA:punch:punches:1:2:BLUDGEON]
The 1st example means that for that attack any bodypart (random from existant) with [STANCE] token will be used.
The 2nd example means that for that attack the certain bodypart with id [BP:
RLA:right lower arm] will be used
There's a description of attacks on the creature tokens page.