So this solution is a way of getting the “many to one” output, correct?

Precisely! That is the basic approach that fits your setup where each example is a sequence of 12 data points as input and one 1 target value. Yes, that diagram made things clearer to me as well :).

What if I wanted to do a sequence input to sequence output?

Sure, you can also copy the Udacity example basically 1:1, you only need to change your data. For this setup, both inputs and targets are sequences of lengths 12, with the target sequences shifted by one data point. In this case,
reshape(-1, self.hidden_size)

with a resulting output shape of (12, hidden_size) is the correct way to go, since you need/want 12 output values, one for each of element in your target sequence.

Or, should I redefine my nn.Linear() layer: self.fc = nn.Linear(hidden_size * seq_length, output_size)? where output_size =  12 if I want a sequence output.

Hm, that’s a good question. Technically you can set up the model like this, I’m just not sure if this “semantically” the right way to do it. Something feels a bit off but I cannot put my finger one it right now :). I would actually be quite curious how the results would be compared to the more established ways.