In Dyalog I would do it this way with (⎕IO ⎕ML)←0 3:
∇ Golf←{
[1] 1≠≡,⍵:0 0⍴'' ⍝ Check ...
[2] ~(1=⍴,⍵)∨(2=⍴,⍵)∧1↑1↓,⍵='.':0 0⍴'' ⍝ ... right argument
[3] a←⎕A((⎕A ⎕R'\l0')⎕A) ⍝ Uppercase and
lowercase alphabet
[4] f←'.'≠↑1↑1↓⍵ ⍝ Scalar flag: not
horizontal
[5] c←↑⍵ ⍝ The input char
[6] ul←c∊¨a ⍝ Which alphabet?
[7] 0=+/ul:0 0⍴'' ⍝ Is input valid?
[8] ({1↓,' ',⍵}⍣f)⍪c{1↓⍵⌽⍨⍵⍳⍺}a⊃⍨ul⍳1 ⍝ Off we go...
[9] }
∇
Display ⍪Golf3¨'c' 'c.' 'D' 'Z.' '/' 'Z/' '//' 'asd' '' (⊂⊂'')(1 2)
┌→────────────────────────────────────────────────────┐
↓ ┌→────────────────────────────────────────────────┐ │
│ │d e f g h i j k l m n o p q r s t u v w x y z a b│ │
│ └─────────────────────────────────────────────────┘ │
│ ┌→┐ │
│ ↓d│ │
│ │e│ │
│ │f│ │
│ │g│ │
│ │h│ │
│ │i│ │
│ │j│ │
│ │k│ │
│ │l│ │
│ │m│ │
│ │n│ │
│ │o│ │
│ │p│ │
│ │q│ │
│ │r│ │
│ │s│ │
│ │t│ │
│ │u│ │
│ │v│ │
│ │w│ │
│ │x│ │
│ │y│ │
│ │z│ │
│ │a│ │
│ │b│ │
│ └─┘ │
│ ┌→────────────────────────────────────────────────┐ │
│ │E F G H I J K L M N O P Q R S T U V W X Y Z A B C│ │
│ └─────────────────────────────────────────────────┘ │
│ ┌→┐ │
│ ↓A│ │
│ │B│ │
│ │C│ │
│ │D│ │
│ │E│ │
│ │F│ │
│ │G│ │
│ │H│ │
│ │I│ │
│ │J│ │
│ │K│ │
│ │L│ │
│ │M│ │
│ │N│ │
│ │O│ │
│ │P│ │
│ │Q│ │
│ │R│ │
│ │S│ │
│ │T│ │
│ │U│ │
│ │V│ │
│ │W│ │
│ │X│ │
│ │Y│ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
│ ┌⊖┐ │
│ ⌽ │ │
│ └─┘ │
└∊────────────────────────────────────────────────────┘
I am aware that the function could easily be shortened but at the
expense of readability.
Note that the real solution in line 8 is actually both, short and
quite complex, but it is still possible to read it in one go from
right to left.
Shortening the function would mean to integrate building up the
alphabets and the checks for the argument being valid and what the
function is supposed to do into the solving line. Clearly this cannot
be right.
For general reasons it also seems to be wrong to me to spend resources
on processing data before I am sure that the argument is valid: those
resources are wasted if the argument turns out to be invalid.