It is good practise to stick with the distro provided packages because this greatly enhances system maintenance and updates/upgrades.
However, there are cases when the standard version doesn't cut it. An important service might require a newer version, or a local policy demands a specific patch.
In that case you have no other choice than to use custom software.
If you're going to create custom software, chances are that you need to install it on multiple systems. That's why it is a good idea to distribute and manage them using the same tool as the distro: apt-get.
For Ubuntu, most of the time you can find newer versions on Launchpad's Personal Package Archive.
We keep a repository of our custom Ubuntu software packages at http://ubuntu.terena.net. Since there is no private/commercial/etc software in this repository, we might move this to Launchpad some day.
When creating your own versions, you are responsible for updating the packages and the repository.
Since this can happen very infrequently, I detailed the steps the steps to (re)create the packages and the repository below as documentation. This example uses the Modmellon module for apache.
Collect all debs and prepare archive
Sync the dists and pool directories to the web server: