3 Golfed 4 bytes, added explanation
source | link

Pip, 24 20 bytes

QPRV:_JbMa@>RV,#aZDb

Use the -l flag to get human-readable output. Try it online!

Explanation

QPRV:_JbMa@>RV,#aZDb
                      a,b are cmdline args (implicit)
                a     1st cmdline arg (the string)
               #      Length
              ,       Range
            RV        Reverse
         a@>          Take slices of a starting at those indices
                 ZDb  Zip the list of slices together, filling out missing values in
                      the matrix with b (the character)
        M             To each row, map this function:
     _Jb               Join on b
  RV:                 Reverse (making top row the bottom and vice versa)
QP                    Quad-palindromize: reflect downward and rightward, with overlap

For example, with inputs of abcd and .:

RV,#a
 [3 2 1 0]
a@>
 ["d" "cd" "bcd" "abcd"]
ZDb
 [['d 'c 'b 'a] ['. 'd 'c 'b] ['. '. 'd 'c] ['. '. '. 'd]]
_JbM
 ["d.c.b.a" "..d.c.b" "....d.c" "......d"]
RV:
 ["......d" "....d.c" "..d.c.b" "d.c.b.a"]
QP
 ["......d......" "....d.c.d...." "..d.c.b.c.d.." "d.c.b.a.b.c.d" "..d.c.b.c.d.." "....d.c.d...." "......d......"]

Pip, 24 20 bytes

QPRV:_JbMa@>RV,#aZDb

Use the -l flag to get human-readable output. Try it online!

Pip, 24 20 bytes

QPRV:_JbMa@>RV,#aZDb

Use the -l flag to get human-readable output. Try it online!

Explanation

QPRV:_JbMa@>RV,#aZDb
                      a,b are cmdline args (implicit)
                a     1st cmdline arg (the string)
               #      Length
              ,       Range
            RV        Reverse
         a@>          Take slices of a starting at those indices
                 ZDb  Zip the list of slices together, filling out missing values in
                      the matrix with b (the character)
        M             To each row, map this function:
     _Jb               Join on b
  RV:                 Reverse (making top row the bottom and vice versa)
QP                    Quad-palindromize: reflect downward and rightward, with overlap

For example, with inputs of abcd and .:

RV,#a
 [3 2 1 0]
a@>
 ["d" "cd" "bcd" "abcd"]
ZDb
 [['d 'c 'b 'a] ['. 'd 'c 'b] ['. '. 'd 'c] ['. '. '. 'd]]
_JbM
 ["d.c.b.a" "..d.c.b" "....d.c" "......d"]
RV:
 ["......d" "....d.c" "..d.c.b" "d.c.b.a"]
QP
 ["......d......" "....d.c.d...." "..d.c.b.c.d.." "d.c.b.a.b.c.d" "..d.c.b.c.d.." "....d.c.d...." "......d......"]
2 Golfed 4 bytes
source | link

Pip, 2424 20 bytes

QPRV ZRV:(_JbMa@>_JbMa@>RV,#a)ZDb#aZDb

Use the -l flag to get human-readable output. Try it online!Try it online!

Pip, 24 bytes

QPRV ZRV:(_JbMa@>,#a)ZDb

Use the -l flag to get human-readable output. Try it online!

Pip, 24 20 bytes

QPRV:_JbMa@>RV,#aZDb

Use the -l flag to get human-readable output. Try it online!

1
source | link

Pip, 24 bytes

QPRV ZRV:(_JbMa@>,#a)ZDb

Use the -l flag to get human-readable output. Try it online!