If you store the zip in your module's files directory you can simply retrieve it on the clients with a normal file resource and the source argument accordingly set (note that generally is not recommended to use it to fetch big files, as, for example, Puppet needs to make a checksum both on client and master to verify if it has been changed) and then have an exec resource which has refreshonly => true , subscribes the above file resource and runs the extraction command.
In ex42 modules you can use puppi::netinstall to retrieve and unpack files, but, it can't be applied to your case, since the file can't be retrieved with a simple curl/wget.
Al