I usually use a few different tools to maintain my applications. Of course this wasn't (and still isn't) always the case, but, in an ideal world I would.....
Document all specs from clients 'feature requests' as structure, behavior & interaction diagrams using UML.
Document all classes using phpDocumentor.
Ensure the entire development process is tracked via an issue tracker (I use atlassians Jira), and all work is commented and committed into version tracking software such as subversion.
All unit tests are maintained within the same repository and supplied with the application.
This is basically how I work at work, though often outside of my day job, things are more rushed.
Who owns what depends on what is written into the contract, but generally, clients own the rights build upon the software I write for them. They can manipulate it however they like, they just can't resell it.