Take first letter of each word, leave spaces and punctuation

CJam, 13 bytes

r{(\'A,f&Sr}h

Works if I can consider only the common punctuation characters, and the output can have trailing spaces. (Thanks to Dennis.)

This question needs much more clarification...

CJam, 17 16 bytes

r{(\eu_elf&Sr}h&

Try it online.

Explanation

r          e# Read one word from input.
{          e# While it is not EOF:
    (\     e# Extract the first character.
    eu     e# Convert the rest to uppercase.
    _el    e# And lowercase.
    f&     e# Delete characters in the first string if not in the second string.
    S      e# Append a space.
    r      e# Read the next word.
}h
&          e# Discard the last space by intersecting with empty string.

Pyth, 14 bytes

jdm+hd-rtd0Gcz

Try it online: Demonstration

Explanation:

                 implicit: z = input string
            cz   split z by spaces
  m              map each word d to:
    hd              first letter of d
   +                +
       rtd0         (lowercase of d[1:]
      -    G         but remove all chars of "abc...xyz")
jd               join resulting list by spaces and print

Python 3.4, 94 92 82 77 bytes

print(*[w[0]+''.join(c[c.isalpha():]for c in w[1:])for w in input().split()])

I'm new to code golfing but I thought I'd give it a try! This one's not a winner, but it was fun.

This just splits the string, taking the first character of each word along with any punctuation in the rest of the word.

*edited with changes by FryAmTheEggman, DLosc