You're right that there should be some documentation of all this. I haven't been able to locate very much, so this summarises what I've found to be the policy so far. It's likely that there is policy enumerated in the Help pages or on Meta.SE, but it's not easy to find. For the moment, this post will have to suffice, together with any comments correcting it or links added to existing policy documentation when it's found, and other answers supplementing it.
Links to the outside world
Yes these are welcome, but they must be relevant where they appear. If the link appears in a question or answer, then it's fine if it links to additional information which supports the post, in the same way as any other reference.
For example, I have Google Maps demonstrations available on my own webspace. In an answer on Stack Overflow, I quote my code, and link to an example which I know is not going to disappear, because I'm in charge of hosting it. I don't have any ELU examples, or I'd link to those here, but the same principle applies: if you have a blog post on Chaucer's use of the subjunctive, by all means summarise and link when it's useful to an answer.
If you're simply mimicking the standard "Let's continue this discussion in chat" comment, then add the link as a comment. Bear in mind that all comments are ephemeral and it only takes two flags to delete them: the comment and the link may suddenly disappear.
You can use your site profile to promote a blog or other external site.
Quoting Stack Exchange content elsewhere
You can. But you must include a citation of the author's name and a link to their site profile, and a link back to the original content too. Attribution policy
This is not supported within Stack Exchange.
There is the @username form of commenting, but comments are not for discussion. While the @username comment will create an Inbox message five minutes later, it's still public. Inbox messages survive the deletion of the originating comment, but deleted comments are still visible to moderators and staff, so even deleting a comment after the first (public) five minutes doesn't make it a private message.
You can use the Chat system and set up your own chat rooms, and invite members to chat. You can't restrict read access, and it's deliberately not easy to restrict write access. Generally even if you do manage it, it will be revoked. Chat is publicly available for everyone. If it's needed, moderators and SE staff can create rooms with restricted availability in order to manage private discussions with particular users for the purposes of moderation, but Stack Exchange has only made that privilege available to moderators.
Bear in mind that Chat is not really site-specific, and all site moderators have moderator access to all chat rooms. In the ELU chatroom you'll see a number of people post who have blue usernames: those who are not ELU mods are mods on other sites. They all have the same privileges in Chat.
Chat can take a bit of getting used to, but it's a good way of discussing matters instead of using comments, which aren't there for discussion. Chat pings when the recipient is offline go in the Inbox to be dealt with when possible, and any message — no matter how old — can be replied to.
But it's all essentially public. For real private messaging, you need to use email outside the Stack Exchange system. See below.
Your personal profile
Your profile page on each site where you're a member is yours. While signature blocks and other paraphernalia are discouraged on posts (to the extent that all such material may be removed), you can use your profile page to publicise what you want — lawyers permitting, of course. Libel or other offensive content is not advised.
On your profile page you will find a link "Edit profile and settings". The "About me" section is fair game for you to publicise what you want, including your email address if you are happy for people to contact you. You can also fill in the fields for website, Twitter following and Git repo, if you have any of those. If you have a blog which is separate from your main website address, I suggest putting the blog address in the "About me" field.
Contacting other users
Contacting other users is very much an "opt-in" thing. Members of the community have to release their own email address into the outside world in order that others can use it. If they do that, it's fair game (as is any response or non-response). If they don't do that, it's probably best to respect their privacy.
On the profile page, there is a space to enter your email address, but this is not published. It is available to moderators and SE staff, but it will only be used in extremis — moderator messages sent through the system will be copied to it by default, and SE staff might use it in some circumstances [which I'm not privy to, I'm not staff; but I can envisage that it might happen]. However, an email address entered there is not shared and if you want the wider community to be able to contact you then you will need to put your email address in the "About me" field.