APL, 53 characters
∊{⍵,'. '↓⍨∨/(3≡⊃i)(5∊i),⍵≡'9608x'[i←⌽'6908'⍳⍵]}∘⍕¨0,⍳
0,⍳N numbers 0..N
{...}∘⍕¨ format each number as a string and do the thing in curly braces
inside the braces ⍵ is the current string
'6908'⍳⍵ encode '6' as 1, '9' as 2, '0' as 3, '8' as 4, and all others as 5
⌽ reverse
'9608x'[A] use each element of A as an index in '9608x':
effectively: swap '9'←→'6', preserve '08', mask other digits
⍵≡ does it match the original string?
this is the first boolean condition, two more to come
5∊i did we have a digit other than '0689'?
3≡⊃i is the first of i (that is, the last of ⍵) a '0' (encoded as 3)?
∨/ disjunction ("or") over the three conditions, returns 0 or 1
'. '↓⍨ drop 0 or 1 elements from the beginning of the string '. '
⍵, prepend ⍵
∊ flatten the results to obtain a single output string