As @chrisdaaz suggested, you can use site.documents
plus additional filtering:
{% assign alldocs = site.documents | <additional standard filtering and sorting> %}
{% assign grouptag = alldocs | map: 'tags' | join: ',' | split: ',' | group_by: tag %}
{%- for tag in grouptag -%}
<h1>{{- tag.name -}} - {{tag.size}}</h1>
{%- for document in alldocs -%}
{% if document.tags contains tag.name %}
<p>{{- document.title -}}
{% endif %}
{%- endfor -%}
{%- endfor -%}
Live example of a tag cloud including all the content of my blog (posts and projects) here.