Where to put custom modules? If I create a custom module for a single site where should I put it?  Previously I would put it in sites/all/modules, or possibly sites/all/modules/custom.  However I just read this article, Creating Your First Module in Drupal 7 Module Development which say the best practice is to put them in sites/default/modules:


  However, as of this writing, /sites/all/modules is not the recommended
  place to put custom modules unless you are running a multi-site
  configuration and the custom module needs to be accessible on all
  sites.
  
  The current recommendation is to put custom modules in the
  /sites/default/modules directory, which does not exist by default.
  This has a few advantages. One is that standard add-on modules are
  stored elsewhere, and this separation makes it easier for us to find
  our own code without sorting through clutter. There are other benefits
  (such as the loading order of module directories), but none will have
  a direct impact on us.
  
  We will always be putting our custom modules in
  /sites/default/modules. This follows Drupal best practices, and also
  makes it easy to find our modules as opposed to all of the other
  add-on modules.


Is this really considered the current best practice?  Is there some official reference to this?
Modules can live in many places. If you use Apple's OSX it's alot like where Applications and Fonts can live in OSX ...

Modules can live at:


/profiles/PROFILENAME/modules/
/sites/default/modules/
/sites/all/modules/
/sites/SITENAME/modules/


core drupal modules are found in DRUPAL_INSTALL_DIRECTORY/modules.

Where a module lives deems how drupal sees it.


Modules in a profile directory can be seen by sites installed by that installation profile.
modules in /sites/default can only be seen by the default drupal site.
modules in /sites/all path can be seen by all drupal powered websites regardless how they were installed, or what subsite they are.
modules in /sites/SUBSITE/modules can only be seen by that subsite.


In general it is best practice to place the module folder where it is needed for its scope of use in your Drupal installation.

Additionally, it is a best-practice to place subfolders such as:


/sites/SUBSITE/modules/contrib
/sites/SUBSITE/modules/custom


to distinguish within a modules directory what is standard 3rd party contributed modules used for a site, and what is custom built drupal modules by your company in /custom.

Yes, there is documentation on this in your drupal installation folder at /sites/all/README.txt

Note: alot of this changes slightly with drupal 8

EDIT - references on /contrib and /custom directories.

Basically at some point in drupal development you want to organize your modules more and more, per site, per drupal installation. Many developers use these types of conventions. Drush Make (bundled into core Drush as of 5.x) allows specification of a subdirectory within /modules to place a module.


Organizing Drupal Modules
Drupal best practices
Drush Make subdir option