I've just started documenting the whole toolchain at http://reinout.vanrees.org/weblog/tags/softwarereleasesseries.html (2010-02-25: still got to write the buildout and the pastescript article).
Distribute is the successor to setuptools, so everywhere you see "setuptools" you can read "distribute", too. Works the same, only maintained and with less bugs.
Basic toolchain idea: use setuptools/distribute to package your python code. Like the "developing django apps" article you mention: every application is its own package. Put your code in a directory and add a setup.py. The setup.py contains the version number, name, dependencies and so and you can run it to create a yourproject-0.1.tar.gz, for instance.
Downloading everything ("easy_install xyz") quickly makes a total and utter mess of your system python's site_packages. Probably with incompatible versions. Buildout (and for instance virtualenv) give you an isolated environment: installed packages are only installed local to that virtualenv/buildout.
Mess part 2: which versions do you want? To get any measure of repeatability and reliability, you've got to be able to control the versions you use ("Django 1.0 or 1.1?"). Buildout allows that.