I like your ntpdate based approach (+1).
It looks upgrade safe to me compared to the Perl based monitor which requires a library import.
(It used to get lost with a software update.)
By default the ntpdate runs 4 polls. A single poll should be enough.
The number of polls can be controlled via the -p paramter followed by a numerical value.
A stratum of 1-15 should be okay.
Thats why my current solution looks as follows:
!/bin/sh
ntpdate -q -p 1 ${1} 2> /dev/null | grep -Ewo 'stratum\s+([1-9]|1[0-5])' > /dev/null
return_codes="${PIPESTATUS[*]}"
if [ "${return_codes}" == "0 0" ]
then
echo "up"
fi