The way I have done this is by searching for the values using the Search object. First, I perform a search that returns an IEnumerable<ModelItem>. Then, for each model item in the collection, I examine the PropertyCategoryCollection and add new values to a hash set. Note that for large models, this method is quite slow. I haven't checked if newer versions of the Navisworks API provide a faster way to retrieve the properties.
br
Ulrik