Zack, Leo or Marty are best by a long way IMO, (better if you name him Zachary or Martin on BC to give him the choice later though).
Nick names as names can be rather trying for the child. I teach a Zack and he keeps having to explain his name is not Zachary. He is only 8 and gets really fed up.
Noel means Noel Edmunds at the moment and it means every Christmas you have to hope they don't sing the carol 'The Last Noel' at school (or hear it on the telly). He won't like it.
Heath is just not my personal taste. Sounds like it should be short for Heathcliff and that really would be a bridge too far!
Sonny is truly, truly awful. Sorry. It is a patronising name to call a smallish boy (probably in an old American film). I can't imagine it would be anything but hugely embarrassing to a teenager or adult to be stuck with . ... IMHO of course.