Here's my code.. only had time for one draft last week and no fine-tuning.
 Code:
function a($)
 Dim $T,$v,$l,$n,$f,$z
 $T = zero,one,two,three,four,five,six,seven,eight,nine,ten,
 eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty
 ReDim Preserve $T[90]
 $T[30]=thirty
 $T[40]=forty
 $T[50]=fifty
 $T[60]=sixty
 $T[70]=seventy
 $T[80]=eighty
 $T[90]=ninety
 $v=Join(Split(Join(Split($, '-'), ''), ' '), '')

 If $ = Val($)			; is numeric
  $f=1				; set flag
  $l=Right($,1)
  If $<21			; direct translation
   $v = $T[$]
  Else				; tens plus ones (if not zero)
   $v = $T[10*left($,1)] + IIf($l<>0,$T[$l],'')
  EndIf
 EndIf

 If $v <> four			; don't process if input is "four"
  Do
   $n = Len($v)			; len of verbose number value
   $z=IIf($f,$n, $T[$n])	; len as either number or verbose value

   $a = '' + $a + $ + ' is ' + $Z + '. '
   $v = $T[$n]			; reset new verbose value
   $=IIf($f,$z,$v)
  Until $n = 4
 EndIf

 $a = $a + IIf($f,'4', 'four') + ' is magic.'

endfunction
When I submitted my code I still had a debug message. Actual score without the message was 571 - here's the run from this morning:
 Code:
KiXtart Version  = 4.61
KiXGolf Script   = kixgolf_fim.kix
Scoring Engine   = 3.3
OS               = Windows 7 Enterprise Edition
CPU              = Intel Pentium Model 14
Speed            = 1662 MHz
Memory           = 2048 MB

Tournament       = Four Is Magic
Processing Start = 2011/05/09 10:11:38.105
Processing End   = 2011/05/09 10:11:38.293
Duration         = 0000/00/00 00:00:00.187
# Tests Run      = 200
# Tests Passed   = 200
# Tests Failed   =
Result           = passed
KiXGolf Score    = 571

Thank you for participating in KiXtart Golf!
Really interesting solutions (as usual) being posted. I wish I had more time to play.

My concept was to process the words, converting digits to words and reusing the conversion logic.

Glenn
_________________________
Actually I am a Rocket Scientist! \:D