There is a new future in puppet since version 2.6.0 and it called "relationship syntax". I'm using it for nagios as well.
This simple trick looks like this :
if $::operatingsystem == "Debian" {
exec { "apt-update":
command => "/usr/bin/apt-get update"
}
Exec["apt-update"] -> Package <| |>
}
Every time a package command is executed, the dependency (in our case 'apt-update') will be triggered fist. You can define longer chains.