Using ref for value types
To answer your question, to me this is an illegitimate use of ref on a value type parameter.

Here's why:

1) Legit usages of ref are when you need to keep track the value of ref parameter or when passing the value is expensive. e.g. when using recursion to traverse a tree and you need to keep track of its depth.

Node&lt;T&gt; FindNode(T root, int nodeValue, ref int depth);


2) The code by the Solution Architect looks confusing and weird because it should be using out parameters instead (not to mention that it smells and looks like it deserves some refactoring).

Unlike ref params, out params need not be initialized prior being passed; which is why returnedOptionSetStringValue and returnedInt are being initialized.

For further reading:
http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
https://stackoverflow.com/questions/1516876/when-to-use-ref-vs-out