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.