First, OpenGeek is definitely the authority here -- not me.
Second, I don’t think we really disagree on anything of substance. There’s no disagreement at all, for example, on how property sets are usually used or how they were originally intended to be used. We also agree completely on how property sets can be accessed in code and on how to get and set their properties.
I’m just pointing out that property sets can also be thought of as generic, independent associative arrays that persist across sessions and can be accessed very conveniently in code. I think it’s likely that there are some cool uses for that, although I haven’t personally found any yet.
I’m fairly confident that there are cases where they would be preferred over TVs and custom DB tables for storing simple associative data (e.g. names=>job titles), assuming that you didn’t need the rendering and input control available in TVs or the searching and sorting capabilities of a custom DB table.
To go back to the original question of the thread, to use a property set with a snippet in a particular template, as OpenGeek has suggested, you attach the property set to the snippet, then in the template you put a snippet tag for that snippet specifying the name of the property set:
[[!SnippetName@PropertysetName]]
The properties in the property set will then be available in the $scriptProperties array in the snippet.