Actually, the way you set up your tests is, in fact, a way to PING each host, but it is not the way nagios is expecting it.
Using Nagios' way, you should:
1) define your hosts to be checked using PING
2) set up other services instead of PING for each host.
With this, Nagios will do a host check (ie: PING) then it will check its services. If a service goes down, Nagios will do a host check to know if it is useful to notify the service.
I hope it is a bit clearer:)
To be a bit more concrete, you should add this definition:
in your host definitions (or in the generic-host definition; in nagios-3.0, the generic-host definition does not include this check_command)
Here is another host definition you could use as a template:
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 0 ; Host event handler is enabled
flap_detection_enabled 0 ; Flap detection is enabled
process_perf_data 0 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
You'll notice it is a bit more complete
Also, make sure the check-host-alive is defined as:
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 3
Then, Nagios WILL do the checks for your hosts (instead of leaving them at PENDING state)