There are 3 kinds of data passed between plugins: keys, values, and tag wildcards. Different plugins let you add, delete keys and change key values. Wildcards on tags give you a third "channel" to pass data. The channel is at the record level instead of the field level, and is narrow.
As an example, the in_file plugin adds the full path of the file to the tag if you use a wildcard:
<source>
type tail
format json
path /var/log/bugs/*.log
pos_file /var/log/td-agent/bugs.pos
tag bugs_infile.*
</source>
<match bugs_infile.*>
filename ${tag_parts[4]}.log
</match>
If this fetches a new line from /var/log/bugs/alpha.log, the second tag will match "bugs_infile.var.log.bugs.alpha.log" and will add a field "filename":"alpha.log" because tag_parts[4] (counting from 0) is "alpha".
I have used tag wildcards to do complex matrix-based dispatching.