All external libraries should be treated the same way. There should be an Add-on-API.
Examples of external library types
Spotify
Google Music
Grooveshark
DAAP
Samba
Rdio
Google Music
Steps :
Install the Google Music songs importer tool (work on Windows/Mac/Linux)
Set to watch your Music folder (same as Nightingale)
Write/update the
Web Scraper to parse and allow download of songs manually
Write an add-on to automatically check/download songs the user doesn't have on local library (Still no
API, may have to reverse engine Google Music)
Ability to import/export playlists
Design a simple interface : A Google Music node in the Left Service Pane, style the web page to remove player controls and maybe bind the Nightingale controls on Google Music instead
Settings :
Auto download (check the whole user Google Music account to see what songs are missing on local db) (disabled by default)
Google Music importer path : either call the importer settings window, or check where is located the pref
Frequency check for new songs uploaded (at each Nightingale start, each X minutes..)
To check :
We could bundle the Google Music importer tool but we have to check if the licence allow this
How to call the importer settings window from Nightingale
Disable Flash applet without errors (improve memory use, and we use Nightingale/GStreamer to play Google Music songs instead)
If using the unofficial
API, we have to safely store the password
Why not just streaming the files?
Risks :
Google Music update could broke the add-on
Slowing down Nightingale with multiple requests
Check that the importer is not uploading the downloaded song (crazy loop

)
Avoid exceeding Google Music songs limit (20,000) (maybe having songs in a subfolder, then ability to chose which songs to upload by simply moving them into this folder)
Links :
What this API would allow
A gap-less integration of any music streaming service into your local library.
A possibility would be to display all tracks as local but they should easily be hidden/shown. This integration allows to search in this libraries and play tracks from them.
Also playlists should be synced between the service and Nightingale.
Special cases
External libraries like spotify, which are impersonal, should not return a list of tracks available. So they would just add properties (webURLs etc.) to existing titles and enhance search results.
How not to do
Recently a player called "Tomahawk" was launched. It displays every source as own tree node, which makes it extremely complicated if you use multiple services. But it was faster.