Look-and-say: Conway revisited
Ruby, 125 120 119 101 bytes



f=-&gt;n{c=n.chars;(n.size%2&gt;0?c.chunk{|x|x}.map{|a,b|[b.size,a]}:c.each_slice(2).map{|a,b|b*a.hex})*''}


String input taken through function f:

f['111221']    # =&gt; "1211"
f['513211']    # =&gt; "111112221"
f['111112221'] # =&gt; "513211"


Expanded with notes:

# define lambda that takes one arg
f = -&gt; (n) {
  # store digits in c
  c = n.chars

  # n is of odd length
  if n.size % 2 &gt; 0
    # group identical numbers
    c.chunk{ |x| x }.map do |a, b|
      # array of [digit count, digit value]
      [b.size, a]
    end
  else
    # slice array into groups of two elements
    c.each_slice(2).map do |a, b|
      # repeat the second digit in a pair
      # the first digit-times.
      b * a.hex
    end
  end * '' # join array
}